/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package FrontController;

import BDelegate.BussinesDelegate;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.omg.CORBA.portable.Delegate;

/**
 *
 * @author Damc
 */
public class ControlUsuario extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession sesion = request.getSession();
        try {
            String peticion = request.getParameter("request");
            if(peticion.equals("login")){
                String nombre = request.getParameter("name");
                String pass = request.getParameter("pass0");
                BussinesDelegate a=new BussinesDelegate();
                try{
                    if(a.existe(nombre, pass)){
                        int rol=a.loggin(nombre, pass);
                        VO.Datoscliente dat = a.infousuario(nombre);

                        sesion.setAttribute("rol", rol);
                        sesion.setAttribute("id", nombre);
                        sesion.setAttribute("pass", pass);
                        sesion.setAttribute("nombre", dat.getNombre());
                        sesion.setAttribute("apellido", dat.getApellido());
                        sesion.setAttribute("mail", dat.getMail());
                        sesion.removeAttribute("tabla");
                        if(rol==1){
                            response.sendRedirect("premiun/indexP.jsp");
                        }
                        if(rol==2){
                            response.sendRedirect("empresas/indexE.jsp");
                        }
                        if(rol==3){
                            response.sendRedirect("admin/indexA.jsp");
                        }
                        if(rol==0){
                            sesion.invalidate();
                            response.sendRedirect("inicio.jsp");
                        }

                    }else{
                        sesion.invalidate();
                        response.sendRedirect("inicio.jsp");
                    }
                }catch(Exception ex){
                    sesion.invalidate();
                    response.sendRedirect("inicio.jsp");
                }
                
                    
            }
            if(peticion.equals("logoff")){
                sesion.invalidate();
                response.sendRedirect("inicio.jsp");
            }
            if(peticion.equals("usuario")){
                sesion.invalidate();
                response.sendRedirect("crearUsuario.jsp");
            }
            if(peticion.equals("empresa")){
                sesion.invalidate();
                response.sendRedirect("crearEmpresa.jsp");
            }
            if(peticion.equals("crear")){
                sesion.invalidate();
                String rol = request.getParameter("rol");
                String idusuario = request.getParameter("idusuario");
                String nombre = request.getParameter("nombre");
                String apellido = request.getParameter("apellido");
                String mail = request.getParameter("mail");
                String pass1 = request.getParameter("pass1");
                String pass2 = request.getParameter("pass2");
                BussinesDelegate bd = new BussinesDelegate();
                try{
                    boolean var1;
                    var1=bd.crearUsuario(idusuario, pass1, pass2, rol, nombre, apellido, mail);
                    String mensaje="";
                    if(var1==true){
                        mensaje="Usuario creado exitosamente";
                    }else{
                        mensaje="ERROR: El usuario ya existe";
                    }
                    request.setAttribute("error", mensaje);
                    //response.sendRedirect("crearUsuario.jsp");
                    request.getRequestDispatcher("crearUsuario.jsp").include(request, response);
                }catch(Exception ex){
                    String mensaje="No se pudo crear el usuario <br>";
                    mensaje=mensaje+ex.getMessage();
                    request.setAttribute("error", mensaje);
                    //response.sendRedirect("crearUsuario.jsp");
                    request.getRequestDispatcher("crearUsuario.jsp").include(request, response);
                }
            }
            //editar con la info que se tenga al iniciar session
            if(peticion.equals("editar")){
                //sesion.invalidate();
                int rol= (Integer)sesion.getAttribute("rol");
                String idusuario = (String)sesion.getAttribute("id");
                String pass= (String) sesion.getAttribute("pass");
                String nombre = request.getParameter("nombre");
                String apellido = request.getParameter("apellido");
                String mail = request.getParameter("mail");
                String pass0 = request.getParameter("pass0");
                String pass1 = request.getParameter("pass1");
                String pass2 = request.getParameter("pass2");
                BussinesDelegate bd = new BussinesDelegate();
                try{
                    boolean edit=false;
                    String mensaje="";
                    edit=bd.editarUsuario(idusuario, pass, pass0, pass1, pass2, mail, nombre, apellido, mail);
                    if(edit==true){
                        mensaje="Usuario creado exitosamente";
                        VO.Datoscliente dat = bd.infousuario(idusuario);
                        sesion.setAttribute("rol", rol);
                        sesion.setAttribute("id", idusuario);
                        if(pass1.equals("d41d8cd98f00b204e9800998ecf8427e")){
                            sesion.setAttribute("pass", pass);
                        }else{
                            sesion.setAttribute("pass", pass1);
                        }
                        //sesion.setAttribute("pass", bd.);
                        sesion.setAttribute("nombre", dat.getNombre());
                        sesion.setAttribute("apellido", dat.getApellido());
                        sesion.setAttribute("mail", dat.getMail());
                        sesion.removeAttribute("tabla");
                    }else{
                        mensaje="ERROR: Se produjo un error al editar el usuario";
                    }

                    sesion.setAttribute("tabla", mensaje);
                    if(rol==1){
                            response.sendRedirect("premiun/editar.jsp");
                        }
                        if(rol==2){
                            response.sendRedirect("empresas/editarU.jsp");
                        }
                        if(rol==3){
                            response.sendRedirect("admin/editar.jsp");
                        }

                    //request.getRequestDispatcher("crearUsuario.jsp").include(request, response);

                }catch(Exception e){
                    String mensaje="No se pudo editar los datos <br>";
                    mensaje=mensaje+e.getMessage();
                    sesion.setAttribute("tabla", mensaje);
                   if(rol==1){
                            response.sendRedirect("premiun/editar.jsp");
                        }
                        if(rol==2){
                            response.sendRedirect("empresas/editarU.jsp");
                        }
                        if(rol==3){
                            response.sendRedirect("admin/editar.jsp");
                        }
                }
//                out.println(rol);
//                out.println("<br>");
//                out.println(idusuario);
//                out.println("<br>");
//                out.println(nombre);
//                out.println("<br>");
//                out.println(apellido);
//                out.println("<br>");
//                out.println(mail);
//                out.println("<br>");
//                out.println(pass0);
//                out.println("<br>");
//                out.println(pass1);
//                out.println("<br>");
//                out.println(pass2);
            }
           // sesion.invalidate();
           // response.sendRedirect("inicio.jsp");
           
        }catch(Exception w){
             
            sesion.invalidate();
            response.sendRedirect("inicio.jsp");
        } finally {
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
